/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package bs.global.modelo;

import bs.tesoreria.modelo.CuentaTesoreria;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

/**
 *
 * @author Claudio
 */
@Entity
@Table(name = "gr_concepto_comprobante")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "MODCOM", discriminatorType = DiscriminatorType.STRING, length = 2)
@IdClass(ConceptoPorComprobantePK.class)
public class ConceptoPorComprobante implements Serializable{
    
    private static final long serialVersionUID = 1L;
        
    @Id
    @Column(name = "MODCOM", nullable = false, length = 2)
    private String modcom;
    @Id
    @Column(name = "CODCOM", nullable = false, length = 6)
    private String codcom;    
    @Id
    @Column(name = "MODCPT", nullable = false, length = 2)
    private String modulo;
    @Id
    @Column(name = "TIPCPT", nullable = false, length = 1)
    private String tipo;
    @Id
    @Column(name = "CODCPT", nullable = false, length = 6)
    private String codigo;
        
    @Column(name = "DEBHAB", nullable = false, length = 1)
    private String debeHaber;
    
    @Column(name = "IMPUES", nullable = false, length = 1)
    private String impuesto;
    
    @Column(name = "EDIIMP", nullable = false, length = 1)
    private String editaImputacion;    
    
    @Column(name = "EDICPT", nullable = false, length = 1)
    private String editaSiCero;
    
    @JoinColumn(name = "DEBCTA", referencedColumnName = "CODIGO", nullable = false)
    @ManyToOne(fetch = FetchType.LAZY)
    private CuentaTesoreria cuentaTesoreriaDebe;
    
    @JoinColumn(name = "HABCTA", referencedColumnName = "CODIGO", nullable = true)
    @ManyToOne(fetch = FetchType.LAZY)
    private CuentaTesoreria cuentaTesoreriaHaber;

    /**
     * EDITXT	Edita textos
     * MODEST	Módulo de estructura
     * COMEST	Comprobante de estructura
     * CODEST	Código de estructura
     * CJCNTITM	Cantidad de items	     *
     * CJCOLSUB	Columna del Subdiario
     * CUENTA	Cuenta Contable

     * MODCPD	Módulo
     * TIPCPD	Tipo de concepto para devengamiento
     * CODCPD	Código de concepto para devengamiento
     * FORMUL	Fórmula de usuario
     * FORMU1	Fórmula Estadística 1	
     * FORMU2	Fórmula Estadística 2
     * COLIMP	Columna para Impuesto
     * MODCOL	Módulo
     * ESTCOL	Estructura de Columnas
     * NINTOT	No se incluye en el total
     * NOINDE	Excluir en cálculo de Descuento
     * EXCPTA	Aplica detalle según concepto primario	
     */
    public ConceptoPorComprobante() {
        
    }

    public String getModcom() {
        return modcom;
    }

    public void setModcom(String modcom) {
        this.modcom = modcom;
    }

    public String getCodcom() {
        return codcom;
    }

    public void setCodcom(String codcom) {
        this.codcom = codcom;
    }

    public String getModulo() {
        return modulo;
    }

    public void setModulo(String modulo) {
        this.modulo = modulo;
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getDebeHaber() {
        return debeHaber;
    }

    public void setDebeHaber(String debeHaber) {
        this.debeHaber = debeHaber;
    }

    public String getImpuesto() {
        return impuesto;
    }

    public void setImpuesto(String impuesto) {
        this.impuesto = impuesto;
    }

    public String getEditaImputacion() {
        return editaImputacion;
    }

    public void setEditaImputacion(String editaImputacion) {
        this.editaImputacion = editaImputacion;
    }

    public String getEditaSiCero() {
        return editaSiCero;
    }

    public void setEditaSiCero(String editaSiCero) {
        this.editaSiCero = editaSiCero;
    }

    public CuentaTesoreria getCuentaTesoreriaDebe() {
        return cuentaTesoreriaDebe;
    }

    public void setCuentaTesoreriaDebe(CuentaTesoreria cuentaTesoreriaDebe) {
        this.cuentaTesoreriaDebe = cuentaTesoreriaDebe;
    }

    public CuentaTesoreria getCuentaTesoreriaHaber() {
        return cuentaTesoreriaHaber;
    }

    public void setCuentaTesoreriaHaber(CuentaTesoreria cuentaTesoreriaHaber) {
        this.cuentaTesoreriaHaber = cuentaTesoreriaHaber;
    }
    
    @Override
    public int hashCode() {
        int hash = 7;
        hash = 71 * hash + (this.modcom != null ? this.modcom.hashCode() : 0);
        hash = 71 * hash + (this.codcom != null ? this.codcom.hashCode() : 0);
        hash = 71 * hash + (this.modulo != null ? this.modulo.hashCode() : 0);
        hash = 71 * hash + (this.tipo != null ? this.tipo.hashCode() : 0);
        hash = 71 * hash + (this.codigo != null ? this.codigo.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final ConceptoPorComprobante other = (ConceptoPorComprobante) obj;
        if ((this.modcom == null) ? (other.modcom != null) : !this.modcom.equals(other.modcom)) {
            return false;
        }
        if ((this.codcom == null) ? (other.codcom != null) : !this.codcom.equals(other.codcom)) {
            return false;
        }
        if ((this.modulo == null) ? (other.modulo != null) : !this.modulo.equals(other.modulo)) {
            return false;
        }
        if ((this.tipo == null) ? (other.tipo != null) : !this.tipo.equals(other.tipo)) {
            return false;
        }
        if ((this.codigo == null) ? (other.codigo != null) : !this.codigo.equals(other.codigo)) {
            return false;
        }
        return true;
    }
    
    


    @Override
    public String toString() {
        return "ConceptoPorComprobante{" + "modcom=" + modcom + ", codcom=" + codcom + ", modulo=" + modulo + ", tipo=" + tipo + ", codigo=" + codigo + '}';
    }
    
}
